package cn.edu.pzhu.javaweb.util;

import javax.sql.DataSource;

import org.junit.Test;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.sql.Connection;
import java.sql.SQLException;

/**
 * C3P0数据库连接池工具类
 * 加载根目录下的c3p0-config.xml配置文件并提供连接池操作方法
 */
public class C3P0Utils {

    // 使用Java标准的DataSource接口，底层实现为C3P0的ComboPooledDataSource
    private static final DataSource dataSource;

    static {
        try {
            // 初始化C3P0连接池（无参构造器自动加载类路径根目录下的c3p0-config.xml）
            dataSource = new ComboPooledDataSource();
            // 验证连接池初始化是否成功
            if (dataSource == null) {
                throw new ExceptionInInitializerError("C3P0连接池初始化失败，请检查c3p0-config.xml配置文件");
            }
            System.out.println("C3P0连接池初始化成功");
        } catch (Exception e) {
            // 初始化失败时抛出异常
            throw new ExceptionInInitializerError("C3P0连接池初始化异常: " + e.getMessage());
        }
    }

    /**
     * 获取数据源（连接池）对象，返回类型为Java标准的DataSource接口
     * @return DataSource接口实例（底层为C3P0连接池）
     */
    public static DataSource getDataSource() {
        return dataSource;
    }

    /**
     * 从连接池获取数据库连接
     * @return 数据库连接对象
     * @throws SQLException 获取连接失败时抛出异常
     */
    public static Connection getConnection() {
        // 从连接池获取连接
       try {
    	   return dataSource.getConnection();
       }catch (SQLException e) {
    	   e.printStackTrace();
    	   return null;
       }   
    }
    @Test
    public void test() throws SQLException {
        for (int i = 1; i <= 11; i++) {
           Connection con = getConnection();
           System.out.println(con);
           if(i==5) {
        	   con.close();
           }
        }
    }
}